<?php

if(!defined('PATH_BOLETO_INCLUDE')){
    define ('PATH_BOLETO_INCLUDE', LIBS.'boleto/include/');
    define ('PATH_BOLETO_IMAGENS', LIBS.'boleto/imagens/');
}

class Boleto {
    
    public static function initFunctions() {
        include_once PATH_BOLETO_INCLUDE.'funcoes_cef.php';
    }
    
    public static function dadosBoleto(Parcela $parcela) {
        
        $config     = Config::getInstance();
        $venda      = $parcela->venda;
        $cliente    = $venda->cliente;
        
        // DADOS DO BOLETO PARA O SEU CLIENTE
        $taxa_boleto = 0;
        $data_venc     = $config->maskData( $parcela->remarcacao ? $parcela->remarcacao : $parcela->validade );
        $valor_cobrado = $parcela->valor; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
        $valor_cobrado = str_replace(",", ".",$valor_cobrado);
        $valor_boleto  = number_format($valor_cobrado+$taxa_boleto, 2, ',', '');

        // Composição Nosso Numero - CEF SIGCB
        $dadosboleto["nosso_numero1"] = $venda->loja->id; // tamanho 3
        $dadosboleto["nosso_numero_const1"] = "2"; //constanto 1 , 1=registrada , 2=sem registro
        $dadosboleto["nosso_numero2"] = $parcela->numero; // tamanho 3
        $dadosboleto["nosso_numero_const2"] = "4"; //constanto 2 , 4=emitido pelo proprio cliente
        $dadosboleto["nosso_numero3"] = $venda->id; // tamanho 9

        $dadosboleto["numero_documento"]    = $cliente->id . '-' . $parcela->venda->id . '/' . $parcela->numero; // Num do pedido ou do documento (Cliene - Venda / Parcela)
        $dadosboleto["data_vencimento"]     = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
        $dadosboleto["data_documento"]      = date("d/m/Y"); // Data de emissão do Boleto
        $dadosboleto["data_processamento"]  = date("d/m/Y"); // Data de processamento do boleto (opcional)
        $dadosboleto["valor_boleto"]        = $valor_boleto; 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula
        
        // DADOS DO SEU CLIENTE
        $dadosboleto["sacado"]      = $cliente->nome." - ".$config->maskCPF($cliente->cpf); //Nome e CPF do Cliente
        $dadosboleto["endereco1"]   = $cliente->endereco; //Endereço do Cliente
        $localidade                 = $cliente->localidade;
        $cidade                     = $localidade->cidade;
        $estado                     = $cidade->estado;
        $dadosboleto["endereco2"]   = '('.$localidade->nome.') '.$cliente->bairro . "; " . $cidade->nome." - ".$estado->nome;
        
        // INFORMACOES PARA O CLIENTE
        $dadosboleto["demonstrativo1"] = "Comprado na Loja ".$venda->loja->sigla;
        $dadosboleto["demonstrativo2"] = "Mensalidade referente a ".$parcela->numero.
                                         " da venda ".$venda->id."<br>Taxa bancária - R$ ".
                                         number_format($taxa_boleto, 2, ',', '');
        $dadosboleto["demonstrativo3"] = "Óptica Capital";

        // INSTRUÇÕES PARA O CAIXA
        if($parcela->numero == '0' && $parcela->status){
            $dadosboleto["instrucoes1"] = "<img src='".IMAGES."backpage.png' width='128px'/>" .
                                          "<img src='".IMAGES."backpage.png' width='128px'/>" .
                                          "<img src='".IMAGES."backpage.png' width='128px'/>";
            $dadosboleto["instrucoes2"] = "";
            $dadosboleto["instrucoes3"] = "";
            $dadosboleto["instrucoes4"] = "";
        } else {
            $data_venc_multa = strtotime('+4 days', strtotime($parcela->validade)); 
            $dadosboleto["instrucoes1"] = "MULTA DE     R$:     3,00 APOS DE ".date('d/m/Y', $data_venc_multa);
            $dadosboleto["instrucoes2"] = "JUROS DE     R$:     0,25 AO DIA";
            $dadosboleto["instrucoes3"] = "NÃO RECEBER APÓS 60 DIAS DO VENCIMENTO";
            $dadosboleto["instrucoes4"] = "PARCELA ".$parcela->numero."/".$parcela->counter;
        }
        
        // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
        $dadosboleto["quantidade"]      = "";
        $dadosboleto["valor_unitario"]  = "";
        $dadosboleto["aceite"]          = "NÃO";		
        $dadosboleto["especie"]         = "R$";
        $dadosboleto["especie_doc"]     = "DM";



        // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
        include_once CONTROLLERS.'loja.php';
        include_once CONTROLLERS.'regiao.php';
        $loja_control   = new LojaController();
        $regiao_control = new RegiaoController();
        
        $cidade_loja = $regiao_control->getCidade($venda->loja->cidade);
        
        $dados = $loja_control->getDadosBancariosLojaOrPadrao($venda->loja->id);
        if(empty($dados->loja)) {
            exit('<h2 style=\'font-family:sans-serif;\'>Não existe uma loja padrão registrada</h2>');
        }
        
        // DADOS DA SUA CONTA - CEF
        $dadosboleto["agencia"]     = $dados->agencia; //"0748"; // Num da agencia, sem digito
        $dadosboleto["conta"]       = $dados->conta; //"1822"; // Num da conta, sem digito
        $dadosboleto["conta_dv"]    = $dados->digitoConta; //"0"; // Digito do Num da conta

        // DADOS PERSONALIZADOS - CEF
        $dadosboleto["conta_cedente"]       = $dados->contaCedente; //"505663"; // ContaCedente do Cliente, sem digito (Somente Números)
        $dadosboleto["conta_cedente_dv"]    = $dados->digitoContaCedente; //"2"; // Digito da ContaCedente do Cliente
        $dadosboleto["carteira"]            = $dados->carteira; //"02";  // Código da Carteira: pode ser SR (Sem Registro) ou CR (Com Registro) - (Confirmar com gerente qual usar)

        // SEUS DADOS
        $dadosboleto["identificacao"]   = "Boleto Óptica Capital - (".$venda->loja->sigla.")";
        $dadosboleto["cpf_cnpj"]        = $venda->loja->cnpj; //"";
        $dadosboleto["endereco"]        = $venda->loja->rua . ', ' . $venda->loja->bairro . ' - ' . $venda->loja->numero;
        $dadosboleto["cidade_uf"]       = $cidade_loja->nome . '-' . $cidade_loja->estado;
        $dadosboleto["cedente"]         = "EDSON RAFAEL F RODRIGUES - ME";

        
        $codigobanco = "104";
        $codigo_banco_com_dv = geraCodigoBanco($codigobanco);
        $nummoeda = "9";
        $fator_vencimento = fator_vencimento($dadosboleto["data_vencimento"]);

        //valor tem 10 digitos, sem virgula
        $valor = formata_numero($dadosboleto["valor_boleto"],10,0,"valor");
        //agencia é 4 digitos
        $agencia = formata_numero($dadosboleto["agencia"],4,0);
        //conta é 5 digitos
        $conta = formata_numero($dadosboleto["conta"],5,0);
        //dv da conta
        $conta_dv = formata_numero($dadosboleto["conta_dv"],1,0);
        //carteira é 2 caracteres
        $carteira = $dadosboleto["carteira"];

        //conta cedente (sem dv) com 6 digitos
        $conta_cedente = formata_numero($dadosboleto["conta_cedente"],6,0);
        //dv da conta cedente
        $conta_cedente_dv = digitoVerificador_cedente($conta_cedente);

        //campo livre (sem dv) é 24 digitos
        $campo_livre = $conta_cedente . $conta_cedente_dv . formata_numero($dadosboleto["nosso_numero1"],3,0) . formata_numero($dadosboleto["nosso_numero_const1"],1,0) . formata_numero($dadosboleto["nosso_numero2"],3,0) . formata_numero($dadosboleto["nosso_numero_const2"],1,0) . formata_numero($dadosboleto["nosso_numero3"],9,0);
        //dv do campo livre
        $dv_campo_livre = digitoVerificador_nossonumero($campo_livre);
        $campo_livre_com_dv ="$campo_livre$dv_campo_livre";

        //nosso número (sem dv) é 17 digitos
        $nnum = formata_numero($dadosboleto["nosso_numero_const1"],1,0).formata_numero($dadosboleto["nosso_numero_const2"],1,0).formata_numero($dadosboleto["nosso_numero1"],3,0).formata_numero($dadosboleto["nosso_numero2"],3,0).formata_numero($dadosboleto["nosso_numero3"],9,0);
        //nosso número completo (com dv) com 18 digitos
        $nossonumero = $nnum . digitoVerificador_nossonumero($nnum);

        // 43 numeros para o calculo do digito verificador do codigo de barras
        $dv = digitoVerificador_barra("$codigobanco$nummoeda$fator_vencimento$valor$campo_livre_com_dv", 9, 0);
        // Numero para o codigo de barras com 44 digitos
        $linha = "$codigobanco$nummoeda$dv$fator_vencimento$valor$campo_livre_com_dv";

        $agencia_codigo = $agencia." / ". $conta_cedente ."-". $conta_cedente_dv;

        $dadosboleto["codigo_barras"] = $linha;
        $dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha);
        $dadosboleto["agencia_codigo"] = $agencia_codigo;
        $dadosboleto["nosso_numero"] = $nossonumero;
        $dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv;

        return $dadosboleto;
        
    }

    public static function drawInLayout($dadosboleto){
        /**
         * Aqui o $dadosboleto é adaptado em um layout
         */
        include PATH_BOLETO_INCLUDE.'layout_cef.php';
    }
    
}
?>
